var filedTypes = ['check', 'database', 'key', 'page','index'];
var headerTr = "template_header_";
var bodytr = "add_column_table_template_";
var iframeId = "iframe_";
var fieldData = [];// 字段的数据
var iframeLoadNumber = 0; // 当前加载的Iframe的数量
var rownumber = 0 ;//标识当前序号
var toDelete = [];  //保存表单待删除属性字段id
$(document).ready(iframeLoaded());
//$("#iframe_check").load(iframeLoaded());
//$("#iframe_database").load(iframeLoaded());
//$("#iframe_key").load(iframeLoaded());
//$("#iframe_page").load(iframeLoaded());
//add-start author： wangkun  date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
//$("#iframe_index").load(iframeLoaded());
//add-end author： wangkun  date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹

function iframeLoaded() {
    iframeLoadNumber++;
    if (iframeLoadNumber == 6) {
        $(".datagrid-toolbar").parent().css("width", "auto");
        initData();
    }
}

function checkAll(cls,ctrl) {
    var target = $('.'+cls);
    if (ctrl.checked){
        target.attr('checked','checked');
        if("dbkey" == cls){
            $('#tab_div_database tbody').find('tr').addClass('selected');
        }
    }else{
        target.removeAttr('checked','checked');
        if("dbkey" == cls){
            $('#tab_div_database tbody').find('tr').removeClass();
        }
    }
}

/**
 *  配置当前选中外键表
 * @param a
 */
function configTable(a) {
    var index=$('.alink').index(a);
    var formId=$('.tableSelect').eq(index).find('option:checked').val();

    createwindow('编辑表','cgFormHeadController.do?addorupdate&id='+formId);
}
/**
 * 配置选中的字典的列表
 * @param a
 */
function configGroupTypeList(a) {
    var index=$('.atypeList').index(a);
    var id=$('.typeGroupSelect').eq(index).find('option:checked').val();

    createwindow('编辑字典列表','systemController.do?typeList&typegroupid='+id);
}

//===========================

function typeListJson() {
    $.ajax({
        url:'../../../systemController.do?typeListJson',
        type:'POST',
        dataType:'JSON',
        data:{
            typeGroupName:'datatype'
        },
        success:function(res){
            function coptions(index){

            }
            if(res.success){
                var typeList = res.obj;
                for(var i = 0; i < typeList.length; i++){
                    var html = '<option value="'+typeList[i].typecode+'">'+typeList[i].typename+'</option>';
                    $(window.frames["iframe_check"].document).find("select[name$='].fieldValidType']").append(html);
                }
            }
        }
    });
}

function typeGroupListJson(currentIndex) {
    $.ajax({
        url:'../../../systemController.do?typeGroupListJson',
        type:'POST',
        dataType:'JSON',
        data:{
            typeGroupName:'datatype'
        },
        success:function(res){

            function coptions(index,update){
                var html = '<option value="'+typeList[index].id+'">'+typeList[index].typegroupname+'</option>';
                if (update){
                    update=":eq("+update+")";
                    $("select[class='typeGroupSelect']"+update).append(html);
                }else{
                    $("#iframe_check").contents().find("select[class='typeGroupSelect']").append(html);
                }
            }
            if(res.success){
                var typeList = res.obj;
                if (currentIndex) {
                    $("select[class='typeGroupSelect']" + ":eq(" + currentIndex + ")").find('option').remove();
                }
                for(var i = 0; i < typeList.length; i++){
                    coptions(i,currentIndex);
                }
            }
        }
    });
}

/**
 * 配置当前选中字典
 * @param a
 */
function configGroupType(a) {
    var index=$('.atypeGroup').index(a);
    var id=$('.typeGroupSelect').eq(index).find('option:checked').val();

    createwindow('编辑字典','systemController.do?aouTypeGroup&id='+id,484,208,function () {
        typeGroupListJson(index);
    });
}

/**
 * 刷新字典列表
 * @param a
 */
function refreshGroupList(a) {
    var index=$('.atypeGroupRefresh').index(a);
    typeGroupListJson(index);
}

//============================

var fixHelper = function(e, ui) {
    ui.children().each(function() {
        $(this).width($(this).width());
    });
    return ui;
};

function initData() {
    addTableHead();
    var indexId=$("#id").val();
    if (indexId){

    }else{
        indexId=$("#extendFormId  option:selected").val();
    }
    $.get("cgFormHeadController.do?getColumnList&id=" + $("#id").val()+"&extendFormId="+$("#extendFormId  option:selected").val(),getDataHanlder);
    $.get("cgFormIndexController.do?getIndexList&id="+indexId,getDataHanlderIndex);

    // $('.t_table').height($(window).height()-400);
    // $(window).resize(function(){
    //     $('.t_table').height($(window).height()-400);
    // });


}

/**
 * 添加表头
 */
function addTableHead() {
    for (var i = 0; i < filedTypes.length; i++) {
        var tr = $(getIframeDocument(filedTypes[i])).find("#"
            + headerTr + filedTypes[i] + " tr").clone();
        $("#tab_div_" + filedTypes[i]+"_title").append(tr);
    }
}
// 兼容不同浏览器获取iframe 内容

//主要情况是ie11下的版本是火狐的标识倒是出差错
function getIframeDocument(id){

    try {
        if (window.frames["iframe_" + id].contentDocument) {
            return window.frames["iframe_" + id].contentDocument;
        }
        return window.frames["iframe_" + id].document;
    } catch (e) {
    }
    return document.getElementById("iframe_" + id).contentDocument;

}
var isFilterId=false;

/**
 * 获取列
 * @param sel
 */
function findFieldList123(index,b,tableId,d) {
    if (tableId){
        $.ajax({
            url:'../../../cgFormHeadController.do?findFieldList',
            type:'POST',
            dataType:'JSON',
            data:{
                formId:tableId
            },
            success:function(res){
                if(res.success){
                    var typeList = res.obj;
                    var select=$("select[name='columns["+index+"].foreignFieldId']");
                    select.find("option:gt(0)").remove();
                    for(var i = 0; i < typeList.length; i++){
                        var html = '<option value="'+typeList[i].id+'">'+typeList[i].fieldName+'--['+typeList[i].type+']--('+typeList[i].content+')'+'</option>';
                        select.append(html);
                        select.val(b);
                    }
                }
            }
        });
    }

}
/**
 * 获取数据的回调
 *
 * @param {}
 * data
 */
function getDataHanlder(data) {
    data = eval("(" + data + ")");
    // 兼容之前order最小为0的问题
    var orderMin = data[0].orderNum == 0;
    var initRow=getMaxNum()-1;//获取当前行号
    var index=0;
    $.each(data, function(idx, item) {
        var pass=false;
        if (isFilterId){
            pass=(item["fieldName"]==='id');
        }
        if (!isFilterId || !pass){
            index=index+1;
            rownumber = initRow+(index);//存储当前序号
            for (var i = 0; i < filedTypes.length; i++) {
                //add-start author： wangkun  date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
                if(i!=4 ){
                    initTrData(item, filedTypes[i], orderMin);
                }
                //add-end author： wangkun  date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
            }
        }
        findFieldList123(idx,item.foreignFieldId,item.foreignTableId,null);
    });
    if (data.length>0){
        jformTypeChange();
        fixTab();
    }
    $('.mainshow').off();
    $('.mainshow').live('change',function () {
        var index= $('.mainshow').index(this);
        if ($('.mainshow :eq('+index+')').attr('checked')){
            $('.mainshow').not(':eq('+index+')').attr('checked',false);
        }
    });

    //动态绑定onchange事件 改变则获取字段
    $('.tableSelect').live('change',function (a,b,c,d) {
        var formId=$(a.currentTarget).find('option:checked')[0].value;
        var index=$('.tableSelect').index($(a.currentTarget));
        findFieldList123(index,'',formId,d);
    });

}

//获取表单的索引配置
function getDataHanlderIndex(data) {
    data = eval("(" + data + ")");

    $.each(data, function(idx, item) {
        rownumber = idx;//存储当前序号
        initTrDataIndex(item, 'index', false);
    });
    if (data.length>0) {
        jformTypeChange();
        fixTab();
    }

}
/**
 * 添加行数据
 *
 * @param {}
 *            item 这个数据
 * @param {}
 *            filedType 这一行的类型
 */
function initTrData(item, filedType, orderMin) {
    var tr = $(getIframeDocument(filedType)).find("#" + bodytr
        + filedType + " tr").clone();

    var isId = item.fieldName == "id";
    $(':input, select,a', $(tr)).each(function() {
        var $this = $(this), name = $this.attr('name'), val = $this.val();
        if(isId){setAttrForThis($this);}
        //自定义一个序号<a> 按名字进行获取对象，并进行序号指定
        if(name.indexOf("#rindex#") > 0){
            $this.attr("name", name.replace('#rindex#',rownumber-1));
            $this.html(rownumber);
        }
        if (name.indexOf("#index#") > 0) {
            var fieldName = name.replace("columns[#index#].", "");
            $this.attr("name", name.replace('#index#',(rownumber-1)));
            try {
                var value=((fieldName.indexOf('.')>-1)?eval('item.'+fieldName):item[fieldName]);
                if (value != "Y" && value != "N") {
                    //--author: zhoujf -----start----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
                    $this.attr('type')=='checkbox'? $this.attr("checked", false):$this.val(value);
                    if($this.attr('type')=='select'){
                        $this[0].call('onchange',$this[0]);
                    }
                    //--author: zhoujf -----end----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
                } else {
                    value == "Y" ? $this.attr("checked", true) : $this
                        .attr("checked", false);
                }
            }catch (e){}

        } else if (name != "ck") {
            $this.attr("name", name.replace('_index',(rownumber-1)));
            $this.val(name.indexOf("columnsfieldName") != -1
                ? item.fieldName
                : item.content);
        }
        else{
            $this.val(item.id);
        }
    });
    $("#tab_div_" + filedType).append(tr);
    // 给数据库的表格加入可移动排序
    if(filedType == 'database'){
        $("#tab_div_" + filedType).find('tbody').addClass('sortable');
        $("#tab_div_" + filedType).find('tbody').multisortable({
            stop:function(event,ui){
                var databaseTr = $("#tab_div_database").find('tbody').find('tr');
                for (var i = 0; i < filedTypes.length; i++) {
                    if(filedTypes[i] == "database") continue;
                    // 当前table的tr
                    var filedTypeTr = $("#tab_div_" + filedTypes[i]).find('tbody').find('tr');
                    // 先清空table里的数据
                    $("#tab_div_" + filedTypes[i]).find('tbody').html('');
                    for(var dataBaseIndex = 0;dataBaseIndex<databaseTr.length;dataBaseIndex++){
                        var dataBaseOrderNum = parseInt($(databaseTr[dataBaseIndex]).find('td').eq(0).find('a').html());
                        // 判断位置是否被移动 如果未移动则直接将数据填充进去
                        if(dataBaseOrderNum - 1 == dataBaseIndex){
                            $("#tab_div_" + filedTypes[i]).find('tbody').append(filedTypeTr.eq(dataBaseIndex))
                            continue;
                        }

                        var findIndex = 0;
                        // 如果位置被移动了，则找到 database下标的位置在当前table是第几个
                        for(var k = 0;k<filedTypeTr.length;k++){
                            var filedTypeOrderNum = parseInt($(filedTypeTr[k]).find('td').eq(0).find('a').html());
                            if(filedTypeOrderNum == dataBaseOrderNum){
                                findIndex = k;
                                break;
                            }
                        }
                        $("#tab_div_" + filedTypes[i]).find('tbody').append(filedTypeTr.eq(findIndex))
                    }
                }
                for (var i = 0; i < filedTypes.length; i++) {
                    resetTrNum("#tab_div_" + filedTypes[i]);
                }
            }
        });
    }
}
//add-start author： wangkun  date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹
function initTrDataIndex(item, filedType, orderMin) {
    var tr = $(getIframeDocument(filedType)).find("#" + bodytr
        + filedType + " tr").clone();
    var isId = item.fieldName == "id";
    $(':input, select,a', $(tr)).each(function() {
        var $this = $(this), name = $this.attr('name'), val = $this.val();
        if(isId){setAttrForThis($this);}
        //自定义一个序号<a> 按名字进行获取对象，并进行序号指定
        if(name.indexOf("#rindex#") > 0){
            $this.attr("name", name.replace('#rindex#',rownumber));
            $this.html(rownumber);
        }
        if (name.indexOf("#index#") > 0) {
            var fieldName = name.replace("indexes[#index#].", "");
            $this.attr("name", name.replace('#index#',(rownumber-1)));
            try{
                var value=((fieldName.indexOf('.')>-1)?eval('item.'+fieldName):item[fieldName]);
                if ( value!= "Y" && value != "N") {
                    //--author: zhoujf -----start----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
                    $this.attr('type')=='checkbox'? $this.attr("checked", false):$this.val(value);
                    //--author: zhoujf -----end----date:20160331 -------for:online开发创建表单时 表属性设置增加一列checkbox设置传不了值的问题
                } else {
                    value == "Y" ? $this.attr("checked", true) : $this
                        .attr("checked", false);
                }
            }catch (e){}

        } else if (name != "ck") {
            $this.attr("name", name.replace('_index',(rownumber-1)));
            $this.val(name.indexOf("columnsfieldName") != -1
                ? item.fieldName
                : item.content);
        }
        else{
            $this.val(item.id);
        }
    });
    $("#tab_div_" + filedType).append(tr);
}
//add-end author： wangkun  date:20160611 for: TASK #1090 【online】online表单缺少索引配置 代码修改痕迹

function setAttrForThis($this){
    return;
    if($this.is('select')){
        $this.attr("onfocus","this.defOpt=this.selectedIndex");
        $this.attr("onchange","this.selectedIndex=this.defOpt;");
    }else if($this.is('input')&&$this.attr('type')=='text'){
        $this.attr("readonly","readonly");
    }else if($this.is('input')&&$this.attr('type')=='checkbox'){
        $this.attr("onclick","return false;");
    }
}

/**
 * 添加行
 */
function addColumnBtnClick() {
    for (var i = 0; i < filedTypes.length-1; i++) {
        addTrToTable(filedTypes[i]);
    }
}
function addIndexBtnClick(){
    addTrToTable('index');
}
function addTrToTable(filedType) {
    var tr = $(getIframeDocument(filedType)).find("#" + bodytr
        + filedType + " tr").clone();
    $("#tab_div_" + filedType).append(tr);
    resetTrNum('#tab_div_' + filedType);
}
function deleteUnUsedFiled(){
    if(toDelete && toDelete.length>0){
        for(index in toDelete){
            if(toDelete[index] == "on") continue;
            $.post("cgFormHeadController.do?delField&id="+ toDelete[index]);
        }
    }
    return true;
}

function syncExtend() {
    isFilterId=true;
    $.get("cgFormHeadController.do?getColumnList&extendFormId="+$("#extendFormId  option:selected").val(),getDataHanlder);
    $.get("cgFormIndexController.do?getIndexList&id="+$("#extendFormId  option:selected").val(),getDataHanlderIndex);
    for (var i = 0; i < filedTypes.length; i++) {
        resetTrNum("#tab_div_" + filedTypes[i]);
    }
}
/**
 * 删除行
 */
function delColumnBtnClick() {
    // 获取当前的check的行并进行遍历
    $("#tab_div_database").find("input[name='ck']:checked").parent().parent("tr").each(function(index, ele){
        //$.post("cgFormHeadController.do?delField&id="+ $("#tab_div_database").find("input[name='ck']:checked").val());
        toDelete.push($(this).find("input[name='ck']:checked").val());
        var selectIndex = ele.rowIndex;
        for (var i = 0; i < filedTypes.length; i++) {
            $("#tab_div_" + filedTypes[i]).find("tr").eq(selectIndex).remove();
        }
    })
    for (var i = 0; i < filedTypes.length; i++) {
        resetTrNum("#tab_div_" + filedTypes[i]);
    }
}
function delIndexBtnClick() {
    $("#tab_div_index").find("input[name='ck']:checked").parent().parent("tr").each(function(index, ele){
        //toDelete.push($(this).find("input[name='ck']:checked").val());
        var selectIndex = ele.rowIndex;
        $("#tab_div_index").find("tr").eq(selectIndex).remove();
    })
}
/**
 * 重设table的order
 *
 * @param {}
 *            tableId
 */
function resetTrNum(tableId) {
    $(tableId + " tbody tr").each(function(i) {
        $(':input, select,a', this).each(function() {
            var $this = $(this), name = $this.attr('name'), val = $this
                .val();
            if (name != null && name.indexOf("#index#") >= 0) {
                $this.attr("name", name.replace('#index#', i));
				/*if (name.indexOf('orderNum') >= 0) {  Date20131212 liuht取消重置orderNumber
				 $this.val(getMaxNum());
				 }*/
            } else if (name != null && name.indexOf("_index") >= 0) {
                $this.attr("name", name.replace('_index', i));
            } else if (name != null && name != "ck") {
                $this.attr("name", name.replace(getNowIndex(name), i));
            }
            //代码移动位置，优化调整     Date20131212
            if (name != null && name.indexOf("rownumber") >= 0) {
                $this.html(i+1);   // 移动tr|新加行|删除行 ---重置 rownumber值
            }
            if (name != null && name.indexOf("orderNum") >= 0) {
                $this.val(i+1);   // 移动tr|新加行|删除行 ---重置 orderNumber值
            }

        });
    });
    jformTypeChange();
}
/**
 * 获取最大的 orderNum
 */
function getMaxNum() {
    var maxNum = 0;
    $("input[name*='orderNum']").each(function() {
        maxNum = parseInt($(this).val()) > maxNum
            ? $(this).val()
            : maxNum;
    });
    return parseInt(maxNum) + 1;
}

/**
 * 同步fieldName
 */
$(document).on('change', '.fieldNameInput','columnsfieldName',valueChange);

/**
 * 同步content
 */
$(document).on('change', '.contentInput','columnscontent',valueChange);


function valueChange(e){
    var val = $(this).val();
    var index = getNowIndex($(this).attr('name'));
    for (var i = 0; i < filedTypes.length; i++) {
        $("#tab_div_" + filedTypes[i]).find("input[name='"+e.data+ index + "']").val(val);
    }
}

/**
 * 获取当前的索引值
 *
 * @param {}
 *            name 这个元素的Name
 * @return {}
 */
function getNowIndex(name) {
    var s = name.indexOf("[");
    var e = name.indexOf("]");
    if(s>=0 && e>=0){
        return name.substring(s + 1, e);
    } else if(name.indexOf("columnsfieldName")>=0){
        return name.substring(16);
    }else if(name.indexOf("columnscontent")>=0){
        return name.substring(14);   //修改字段备注无法同步问题
    }
}

/**
 * 主键策略的改变,控制序列的输入
 */
function jformPkTypeChange(){
    var pkType = $("#jformPkType").val();
    var $idInput=null;
    $("[name$='fieldName']").each(function(){
        var fieldv = $(this).val();
        if(fieldv && fieldv=="id"){
            $idInput=$(this);
        }
    });
    var $idInput_type=$idInput.parent().parent().find("select[name$='type']");
    var $idInput_length=$idInput.parent().parent().find("input[name$='length']");
    $("#jformPkSequence").val("");
    if(pkType && pkType=="SEQUENCE"){
        $("#jformPkTypeTd").attr("colspan","1");
        $("#jformPkSequenceV").attr("style","");
        $("#jformPkSequenceN").attr("style","");
        $("#jformPkSequence").attr("datatype","*");
        $idInput_type.val("int");
        $idInput_length.val("20");
    }else{
        $("#jformPkSequenceV").attr("style","display: none;");
        $("#jformPkSequenceN").attr("style","display: none;");
        $("#jformPkTypeTd").attr("colspan","3");
        $("#jformPkSequence").removeAttr("datatype");
        if(pkType=="NATIVE"){
            $idInput_type.val("Integer");
            $idInput_length.val("20");
        }else if(pkType=="UUID"){
            $idInput_type.val("string");
            $idInput_length.val("36");
        }
    }
}
/**
 * 表类型的改变,附表才可以设置主表
 */
function jformTypeChange(){
    openOrCloseSetKeyOp(true,$("#jformType").val() == 3);
    openOrCloseRelationTypeDisplay(true,$("#jformType").val() == 3);
}
//控制：只有附表才可以选择附表关联类型
function openOrCloseRelationTypeDisplay(boo){
    if(boo){
        $("#relation_type_div").attr("style","display: block;");
    }else{
        $("#relation_type_div").attr("style","display: none;");
    }
}

function openOrCloseSetKeyOp(boo){
    $("#tab_div_key tbody tr").each(function(i) {
        $(':input', this).each(function() {
            var $this = $(this), name = $this.attr('name');
            if (name != null && (name.indexOf("mainTable") >= 0
                ||name.indexOf("mainField") >= 0)&&
                name!="columns[0].mainTable"&&name!="columns[0].mainField") {
                boo?$this.removeAttr("readonly"):
                    $this.attr("readonly","readonly");
            }
        });
    });
}


/**
 * fix修复
 */
function fixTab(){
    $('#tabs').tabs({
        onSelect:function(title){
            if(title=="数据库属性"){fix("database");}
            else if(title=="页面属性"){fix("page");}
            else if(title=="校验字典"){fix("check");}
            else if(title=="外键"){fix("key");}
            else if(title=="索引"){fix("index");}
            $('#tabs .panel-body').css('width','auto');
        }
    });
    $('#t_table_database').scroll(function(){
        $('#tab_div_database_title').css('margin-left',-($('#t_table_database').scrollLeft()));
    });
    $('#t_table_page').scroll(function(){
        $('#tab_div_page_title').css('margin-left',-($('#t_table_page').scrollLeft()));
    });
    $('#t_table_check').scroll(function(){
        $('#tab_div_check_title').css('margin-left',-($('#t_table_check').scrollLeft()));
    });
    $('#t_table_key').scroll(function(){
        $('#tab_div_key_title').css('margin-left',-($('#t_table_key').scrollLeft()));
    });
    $('#t_table_index').scroll(function(){
        $('#tab_div_index_title').css('margin-left',-($('#t_table_index').scrollLeft()));
    });
}

//利用js让头部与内容对应列宽度一致。
function fix(type){
    for(var i=0;i<=$('#tab_div_'+type+' tr:last').find('td:last').index();i++){
        $('#tab_div_'+type+'_title th').eq(i).css('width',
            $('#tab_div_'+type+' tr:last').find('td').eq(i).width());
    }
    $('#tab_div_'+type+'_title').css('width',
        $('#tab_div_'+type+' tr:last').width());
}



